/**
 * Ajax Post组件
 * */

(function () {
    $.ajaxSetup({
        timeout: 15000
    });
    if (!window.SOHO) {
        window.SOHO = {};
    }
    function fetch(method, args) { //替换jq的get或者post方法，使得get或者post的时候回调函数一定会被执行，无论请求是否成功。
        var argIndex = 0;
        var callBack; //回调函数
        while (args[argIndex++]) {
            if (typeof args[argIndex] == 'function') { //找到了callback
                callBack = args[argIndex];
                args[argIndex] = function(){};
                break;
            }
        }
        callBack = callBack || function () {
            }; //若没有回到函数，则默认为空
        return $[method].apply($, args).done(function (res) {
            callBack.call(this, res);
        }).fail(function (res, error) {
            if(res.status != 200 && res.status != 0){
                error += ':' + res.status;
            }
            if(error != 'abort'){ //TODO: 先这样写，这个逻辑需要优化
                SOHO.tips('请求失败，请稍后再试' + '[' + error + ']', 'warning', 3000);
            }
            callBack.call(this, false);
        });
    }

    SOHO.post = function(){
        return fetch('post', arguments);
    };
    SOHO.get = function(){
        return fetch('get', arguments);
    };

        /**
     * 显示服务器报错，服务器返回的错误信息可以是字符串或者对象，如果是对象则包含了错误字段及其对应错误值。目前只显示第一个错误值，忽略其他信息
     * */
    SOHO.showPostError = function (resultMessage, defaultMessage, $postForm, type, during) {
        resultMessage = resultMessage || '';
        defaultMessage = defaultMessage || '操作失败,请稍后再试';
        type = type || 'error';
        during = during || 2000;

        //如果服务器返回的resultMessage是对象，显示第一个属性对应的值
        if (typeof resultMessage == 'object') {
            for (var i in resultMessage) {
                SOHO.tips(resultMessage[i], type, during);
                $postForm && $postForm.find('[name="' + i + '"]').focus();
                return;
            }
        }

        //15823505830

        //如果服务器返回的resultMessage是字符串，直接显示
        if (typeof resultMessage == 'string' && resultMessage != '') {
            defaultMessage = resultMessage;
        }

        SOHO.tips(defaultMessage, type, during);

    };

    SOHO.isChrome = function () {
        return /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
    };

    SOHO.isFirefox = function () {
        return /Firefox/.test(navigator.userAgent);
    };

    SOHO.isSafari = function () {
        return /Safari/.test(navigator.userAgent);
    };

    SOHO.verifyChrome = function () {
        if (!SOHO.isChrome() && !SOHO.isFirefox() && !SOHO.isSafari()) {
            if (!local_storage.has('SOHO.verifyChrome')) {
                local_storage.set('SOHO.verifyChrome', true, time_const.month);
                (new SOHO.Dialog({
                    title: '温馨提示',
                    content: '<div class="ui-dialog-bd">为了保证浏览和操作体验，建议您使用<a target="_blank" href="http://rj.baidu.com/soft/detail/14744.html">chrome</a>浏览器！</div>'
                })).open();
            }
        }
    };
    SOHO.tr = function(str){
        return str;
    };
    SOHO.staticUrl = '/yipingou/static';
    SOHO.host = '127.0.0.1/yipingou/';
})();